home *** CD-ROM | disk | FTP | other *** search
/ Aminet 2 / Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso / Aminet / dev / asm / TBSource.lha / Texter / Texter.S
Text File  |  1993-07-02  |  7KB  |  392 lines

  1. *************************************************
  2. *                        *
  3. *          (C)opyright 1991            *
  4. *                        *
  5. *         by  Tomi Blinnikka            *
  6. *                        *
  7. *    Texter testing cos' I'm bored        *
  8. *                        *
  9. * Version 0.01a    16/07/1991            *
  10. *                        *
  11. * BUGS:    Not finished                *
  12. *                        *
  13. * Version 0.01b    28/07/1992            *
  14. *                        *
  15. * Added CTRL_C check and changed alot of other    *
  16. * stuff.                    *
  17. *                        *
  18. *************************************************
  19.     
  20.  
  21.     INCLUDE    "JMPLibs.i"
  22.     INCLUDE    "libraries/dos.i"
  23.  
  24.     INCLUDE    "XREF:2.0.xref"
  25.     INCLUDE    "XREF:dos.xref"
  26.     INCLUDE    "XREF:exec.xref"
  27.  
  28.         section    Texter,CODE
  29.     
  30. Start:        move.l    a0,FileAddress        ;get filename
  31.         clr.b    -1(a0,d0.l)        ;add null to end of filename
  32.         openlib    Dos,ShutDown
  33.         move.l    _DosBase(pc),_DOSBase
  34.         move.l    $4,_SysBase
  35.  
  36.         lib    Dos,Output
  37.         move.l    d0,_stdout
  38.         beq    ShutDown
  39.  
  40.         move.l    FileAddress(pc),a0
  41.         tst.b    (a0)
  42.         beq    NoFName
  43.  
  44.         move.l    FileAddress(pc),a0
  45.         cmp.b    #'"?',(a0)
  46.         beq    CmdLineHelp
  47.         cmp.w    #'-?',(a0)
  48.         beq    CmdLineHelp
  49.         cmp.b    #'h',(a0)
  50.         beq    CmdLineHelp
  51.         cmp.w    #'-h',(a0)
  52.         beq    CmdLineHelp
  53.  
  54.         move.l    FileAddress(pc),d1
  55.         move.l    #MODE_OLDFILE,d2
  56.         lib    Dos,Open
  57.         move.l    d0,TextFile
  58.         beq    FileError
  59.  
  60.         move.l    TextFile(pc),d1        ;Get length of file.
  61.         move.l    #00,d2
  62.         move.l    #01,d3
  63.         lib    Dos,Seek
  64.         move.l    TextFile(pc),d1
  65.         lib    Dos,Seek
  66.         tst.l    d0
  67.         beq    ZeroLength
  68.  
  69.         move.l    d0,d6
  70.         move.l    TextFile(pc),d1
  71.         move.l    #00,d2
  72.         move.l    #-1,d3
  73.         lib    Dos,Seek
  74.  
  75.         lea.l    FileBuffer(pc),a0
  76.         move.l    a0,a4
  77.         move.l    #$00,d5
  78.  
  79. ;Start of loop.
  80.  
  81. StartLoop:    clr.l    d1
  82.         bset.l    #SIGBREAKB_CTRL_C,d1    ;check for CTRL_C
  83.         lib    Dos,CheckSignal
  84.         btst.l    #SIGBREAKB_CTRL_C,d0
  85.         bne    Break
  86.  
  87.         move.l    TextFile(pc),d1
  88.         move.l    a4,d2
  89.         move.l    #1,d3
  90.         lib    Dos,Read
  91.         tst.l    d0
  92.         beq    FileError
  93.         bsr    CheckInput
  94.         cmp.w    #00,Status
  95.         beq    ContWriting
  96.         bra    TestEnd
  97. ContWriting:    move.l    _stdout(pc),d1
  98.         move.l    a4,d2
  99.         lib    Dos,Write        ; d3=1
  100.         bsr    Delay
  101. TestEnd:    cmp.l    d5,d6
  102.         bne    StartLoop
  103.  
  104. ShutDown:    tst.l    TextFile
  105.         beq    ShutDown9000
  106.         move.l    TextFile(pc),d1
  107.         lib    Dos,Close
  108.         move.l    #$00,TextFile
  109.  
  110. ShutDown9000:    bsr    DoPlain
  111.  
  112.         closlib    Dos
  113.  
  114. ShutDown2000:
  115. ShutDownOut:    move.l    #RETURN_OK,d0
  116.         rts
  117.  
  118. CheckInput:    add.l    #01,d5
  119.         cmp.w    #$02,Status        ;Returning to noneffect.
  120.         beq    ClearStatus
  121.         cmp.w    #01,Status        ;In effect mode?
  122.         bne    NoEffect1
  123.         cmp.b    #$1b,(a4)
  124.         bne    Effect1
  125.         move.w    #$02,Status
  126.         rts
  127. Effect1:    cmp.b    #'0',(a4)
  128.         bne    Effect1.1
  129.         move.w    #$00,Speed
  130.         rts
  131. Effect1.1:    cmp.b    #'1',(a4)
  132.         bne    Effect1.2
  133.         move.w    #$01,Speed
  134.         rts
  135. Effect1.2:    cmp.b    #'2',(a4)
  136.         bne    Effect1.3
  137.         move.w    #$02,Speed
  138.         rts
  139. Effect1.3:    cmp.b    #'3',(a4)
  140.         bne    Effect1.4
  141.         move.w    #$03,Speed
  142.         rts
  143. Effect1.4:    cmp.b    #'d',(a4)
  144.         bne    Effect2
  145.         bsr    Delay
  146.         rts
  147. Effect2:    cmp.b    #'b',(a4)
  148.         bne    Effect3
  149.         bsr    BoldOn
  150.         rts
  151. Effect3:    cmp.b    #'i',(a4)
  152.         bne    Effect4
  153.         bsr    ItalicOn
  154.         rts
  155. Effect4:    cmp.b    #'u',(a4)
  156.         bne    Effect5
  157.         bsr    UnderLineOn
  158.         rts
  159. Effect5:    cmp.b    #'r',(a4)
  160.         bne    Effect6
  161.         bsr    ReverseOn
  162.         rts
  163. Effect6:    cmp.b    #'p',(a4)
  164.         bne    Effect7
  165.         bsr    Plain
  166.         rts
  167. Effect7:    cmp.b    #'c',(a4)
  168.         bne    Effect8
  169.         bsr    CursorOff
  170.         rts
  171. Effect8:    cmp.b    #'C',(a4)
  172.         bne    Effect9
  173.         bsr    CursorOn
  174.         rts
  175. Effect9:    cmp.b    #'!',(a4)
  176.         bne    Effect10
  177.         bsr    ClearCLI
  178.         rts
  179. Effect10:    rts
  180.  
  181. ClearStatus:    move.w    #$00,Status
  182.         rts
  183.  
  184. NoEffect1:    cmp.b    #$1b,(a4)
  185.         bne    NoEffect2
  186.         move.w    #01,Status
  187. NoEffect2:    rts
  188.  
  189. Delay:        cmp.w    #00,Speed
  190.         beq    Delay_OUT
  191.         cmp.w    #01,Speed
  192.         bne    Delay1
  193.         move.l    #1,d1
  194. Delay1:        cmp.w    #02,Speed
  195.         bne    Delay2
  196.         move.l    #3,d1
  197. Delay2:        cmp.w    #03,Speed
  198.         bne    Delay3
  199.         move.l    #5,d1
  200. Delay3:        lib    Dos,Delay
  201. Delay_OUT:    rts
  202.  
  203. DoPlain:    lea.l    PlainText1,a0
  204.         bsr    Printer
  205.         lea.l    CursorOnText1,a0
  206.         bsr    Printer
  207.         rts
  208.  
  209. Plain:        lea.l    PlainText1,a0
  210.         bsr    Printer
  211.         rts
  212. BoldOn:        lea.l    BoldOnText1,a0
  213.         bsr    Printer
  214.         rts
  215. ItalicOn:    lea.l    ItalicOnText1,a0
  216.         bsr    Printer
  217.         rts
  218. UnderLineOn:    lea.l    UnderLineOnText1,a0
  219.         bsr    Printer
  220.         rts
  221. ReverseOn:    lea.l    ReverseOnText1,a0
  222.         bsr    Printer
  223.         rts
  224. CursorOn:    lea.l    CursorOnText1,a0
  225.         bsr    Printer
  226.         rts
  227. CursorOff:    lea.l    CursorOffText1,a0
  228.         bsr    Printer
  229.         rts
  230. ClearCLI:    lea.l    ClearCLIText1,a0
  231.         bsr    Printer
  232.         rts
  233.  
  234. CmdLineHelp:    lea.l    UsageText1,a0
  235.         bsr    Printer
  236.         bra    ShutDown
  237.  
  238. Break:        bsr    DoPlain
  239.         lea.l    CRLFText1,a0
  240.         bsr    Printer
  241.         lea.l    BreakText1,a0
  242.         bsr    Printer
  243.         bra    ShutDown
  244.  
  245. NoFName:    lea.l    ErrorText1,a0
  246.         bsr    Printer
  247.         lea.l    NoFNameText1,a0
  248.         bsr    Printer
  249.         bra    ShutDown
  250.  
  251. ZeroLength:    lea.l    ErrorText1,a0
  252.         bsr    Printer
  253.         lea.l    LengthText1,a0
  254.         bsr    Printer
  255.         bra    ShutDown
  256.  
  257. Printer:    ;tst.w    Quiet
  258.         ;beq    Printer1
  259.         printa    a0
  260. Printer1:    rts
  261.  
  262.  
  263. FileError:    lib    Dos,IoErr
  264.         cmp.l    #ERROR_NO_FREE_STORE,d0
  265.         bne    CNOC1
  266.         lea.l    NoFreeSText1,a0
  267.         bra    FileError_OUT
  268. CNOC1:        cmp.l    #ERROR_TASK_TABLE_FULL,d0
  269.         bne    CNOC2
  270.         lea.l    TaskTFullText1,a0
  271.         bra    FileError_OUT
  272. CNOC2:        cmp.l    #ERROR_LINE_TOO_LONG,d0
  273.         bne    CNOC3
  274.         lea.l    LineLongText1,a0
  275.         bra    FileError_OUT
  276. CNOC3:        cmp.l    #ERROR_OBJECT_IN_USE,d0
  277.         bne    CNOC4
  278.         lea.l    ObjInUseText1,a0
  279.         bra    FileError_OUT
  280. CNOC4:        cmp.l    #ERROR_OBJECT_NOT_FOUND,d0
  281.         bne    CNOC5
  282.         lea.l    FileNotFText1,a0
  283.         bsr    Printer
  284.         printa    FileAddress(pc)
  285.         lea.l    CRLFText1,a0
  286.         bra    FileError_OUT
  287. CNOC5:        cmp.l    #ERROR_DISK_NOT_VALIDATED,d0
  288.         bne    CNOC6
  289.         lea.l    NValidatText1,a0
  290.         bra    FileError_OUT
  291. CNOC6:        cmp.l    #ERROR_DEVICE_NOT_MOUNTED,d0
  292.         bne    CNOC7
  293.         lea.l    NMountText1,a0
  294.         bra    FileError_OUT
  295. CNOC7:        cmp.l    #ERROR_READ_PROTECTED,d0
  296.         bne    CNOC8
  297.         lea.l    ReadProText1,a0
  298.         bra    FileError_OUT
  299. CNOC8:        cmp.l    #ERROR_NOT_A_DOS_DISK,d0
  300.         bne    CNOC9
  301.         lea.l    NDosText1,a0
  302.         bra    FileError_OUT
  303. CNOC9:        cmp.l    #ERROR_NO_DISK,d0
  304.         bne    CNOC10
  305.         lea.l    NDiskText1,a0
  306.         bra    FileError_OUT
  307. CNOC10:        lea.l    FileErrorText1,a0
  308.         bra    FileError_OUT
  309. FileError_OUT:    bsr    Printer
  310.         bra    ShutDown
  311.  
  312. ;Structures
  313.  
  314. ;Library stuff (well what's needed anymore)
  315.  
  316.         libnames
  317.  
  318. _DOSBase:    dc.l    0
  319. _SysBase:    dc.l    0
  320.  
  321. ;File stuff
  322.  
  323. _stdout:    dc.l    0
  324. FileAddress:    dc.l    0
  325. TextFile:    dc.l    0
  326. FileBuffer:    dc.b    0,0
  327.  
  328. ;Other stuff XIV
  329.  
  330. Status:        dc.w    0        ;0=Not in Effect mode, 1=In effect mode
  331. Speed:        dc.w    0        ;0=Off, 1=Fast, 2=Medium, 3=Slow
  332.  
  333.         dc.b    "$VER: Texter 0.01b (27.7.92)",0
  334.  
  335. UsageText1:    dc.b    "Texter 0.01b (C)opyright 1991-92 Tomi Blinnikka",13,10,13,10
  336.         dc.b    "USAGE: Texter [Filename]",13,10,13,10
  337.         dc.b    "       Where: [Filename] is the file to be printed.",13,10,13,10,0
  338.  
  339. ;Effects
  340.  
  341. ClearCLIText1:    dc.b    $0c,0
  342. PlainText1:    dc.b    $9b,$30,$6d,0
  343. BoldOnText1:    dc.b    $9b,$31,$6d,0
  344. ItalicOnText1:    dc.b    $9b,$33,$6d,0
  345. UnderLineOnText1: dc.b    $9b,$34,$6d,0
  346. ReverseOnText1:    dc.b    $9b,$37,$6d,0
  347. CursorOnText1:    dc.b    $9b,$20,$70,0
  348. CursorOffText1:    dc.b    $9b,$30,$20,$70,0
  349.  
  350. ;Error texts
  351.  
  352. NoFNameText1:    dc.b    "No filename given.",13,10,0
  353. LengthText1:    dc.b    "File length equals zero.",13,10,0
  354. ErrorText1:    dc.b    "ERROR: ",0
  355. NoFreeSText1:    dc.b    "No free store",13,10,0
  356. TaskTFullText1:    dc.b    "Task table full",13,10,0
  357. LineLongText1:    dc.b    "Line too long",13,10,0
  358. ObjInUseText1:    dc.b    "Object in use",13,10
  359. FileNotFText1:    dc.b    "File not found",13,10,"Filename was: ",0
  360. NValidatText1:    dc.b    "Disk not validated",13,10,0
  361. NMountText1:    dc.b    "Device not mounted",13,10,0
  362. ReadProText1:    dc.b    "File is read protected",13,10,0
  363. NDosText1:    dc.b    "Not a dos disk",13,10,0
  364. NDiskText1:    dc.b    "No disk in drive",13,10,0
  365. FileErrorText1:    dc.b    "Sorry, file error",13,10,0
  366. CRLFText1:    dc.b    13,10,0
  367. BreakText1:    dc.b    "***Break",13,10,0
  368.         ds.l    0
  369.  
  370.         END
  371.  
  372. Effect1:    cmp.w    #'d0',(a4)
  373.         bne    Effect1.1
  374.         move.w    #$00,Speed
  375.         bsr    Delay
  376.         rts
  377. Effect1.1:    cmp.w    #'d0',(a4)
  378.         bne    Effect1.2
  379.         move.w    #$01,Speed
  380.         bsr    Delay
  381.         rts
  382. Effect1.2:    cmp.w    #'d0',(a4)
  383.         bne    Effect1.3
  384.         move.w    #$02,Speed
  385.         bsr    Delay
  386.         rts
  387. Effect1.3:    cmp.w    #'d0',(a4)
  388.         bne    Effect2
  389.         move.w    #$03,Speed
  390.         bsr    Delay
  391.         rts
  392.